package object_Test;

interface ITest {
    void test();
}

class TestImpl implements ITest {

    @Override
    public void test() {
        System.out.println("hehe");
    }
}


public class Object_Test {
    public static void main(String[] args) {

        // 接口引用
        ITest i1 = new TestImpl();
        // 整型数组引用
        int[] data = new int[10];
        // 只要是引用类型，都可以使用Object来接收
        Object obj1 = i1;
        Object obj2 = data;

//        // Object是所有类(JDK本身的类，自定义的类都是Object的子类)
//      Object aa = new AA();//向上转型
//      System.out.println(aa);

//        AA a1 = new AA("张三",18);
//        AA a2 = new AA("李四",19);
//        AA a3 = new AA("李四",19);
//
//        System.out.println(a1.equals(a2));
//        System.out.println(a2.equals(a3));



    }
}

class AA{
    private String name;
    private int age;

    public AA(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public boolean equals(Object obj){
        //1.若当前对象就是Obj，也就是自己比自己，直接true
        if(this == obj){
            return true;
        }else{
            //情况 2.此时当前对象和obj指向的对象确实不是一个地址
            //若此时obj指向的对象和AA类压根没关系
            if(obj instanceof AA){
                //3.此时说明obj这个引用指向的对象确实是AA类的对象，且跟引用的对象不是同一块地址。
                //那么就脱下obj的外衣，还原本质进行比较。向下转型
                AA a = (AA) obj;
                return this.age == a.age && this.name.equals(a.name)  ;
            }
        }
        return false;
    }
    //    public String toString() {
//
//        return "AA的toString方法";//覆写
//    }
}